home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-10-18 | 6.9 KB | 326 lines | [TEXT/CWIE] |
- // CMainWindow.cp -- window methods
-
- #include "CMainWindow.h"
-
- #include <UEnvironment.h>
- #include <UReanimator.h>
- #include <URegistrar.h>
- #include <LStream.h>
- #include <LTabGroup.h>
- #include <LPictureControl.h>
- #include <LAMControlImp.h>
- #include <LGAPictureControlImp.h>
- #include <LStaticText.h>
- #include <LAMStaticTextImp.h>
- #include <LGAStaticTextImp.h>
- #include <LScrollerView.h>
- #include <LScrollBar.h>
- #include <LAMTrackActionImp.h>
- #include <LStdScrollBarImp.h>
- #include "AMPanelTableView.h"
- #include "CReminder.h"
- #include <UAttachments.h>
- #include <LTableMonoGeometry.h>
- #include <LTableSingleSelector.h>
- #include <LPushButton.h>
- #include <LAMPushButtonImp.h>
- #include <LGAPushButtonImp.h>
- #include <CTextUtils.h>
-
- #include "DReminder.h"
- #include "DDocData.h"
- #include "CAdd.h"
- #include "AMReminderCmds.h"
-
- const MessageT msgReminders = 'Remi';
-
- #define PPob_MainWindowID 201
- #define RidL_MainWindowID 201
-
- Boolean CMainWindow::sIsRegistered = false;
-
- //----------
- CMainWindow* CMainWindow::CreateMainWindow (
- LCommander* inSuperCommander,
- DDocData* inData)
- {
- if (!sIsRegistered) {
- RegisterClass ();
- }
-
- CMainWindow* window;
- window = (CMainWindow *)LWindow::CreateWindow(PPob_MainWindowID, inSuperCommander);
- window->ConnectToData (inData);
- return window;
- }
-
- //----------
- #define RegisterClasses(AbstractClass,AMImpClass,GAImpClass) \
- RegisterClass_(AbstractClass); \
- if (useAppearance) { \
- RegisterClassID_(AMImpClass, AbstractClass::imp_class_ID); \
- } else { \
- RegisterClassID_(GAImpClass, AbstractClass::imp_class_ID); \
- }
-
- //----------
- void CMainWindow::RegisterClass ()
- {
- Boolean useAppearance = UEnvironment::HasFeature (env_HasAppearance);
-
- RegisterClass_(CMainWindow);
-
- // register the pane classes we use
- RegisterClasses (LPictureControl, LAMControlImp, LGAPictureControlImp);
- RegisterClasses (LStaticText, LAMStaticTextImp, LGAStaticTextImp);
- RegisterClass_(LScrollerView);
- RegisterClasses (LScrollBar, LAMTrackActionImp, LStdScrollBarImp);
- RegisterClass_(AMPanelTableView);
- RegisterClasses (LPushButton, LAMPushButtonImp, LGAPushButtonImp);
-
- sIsRegistered = true;
- }
-
- //----------
- CMainWindow::CMainWindow (
- LStream* inStream)
- : LWindow (inStream)
- {
- }
-
- //----------
- CMainWindow::~CMainWindow ()
- {
- }
-
- //----------
- // This member function gets called once the containment hierarchy that contains
- // this pane has been built. It gives us a chance to get data members for
- // interesting subviews, and to do other operations now that our subviews exist.
- void CMainWindow::FinishCreateSelf ()
- {
- mRemindersTable = (AMPanelTableView*)FindPaneByID ('Remi');
- mRemindersTable->AddAttachment (new LEraseAttachment());
- mRemindersTable->SetTableGeometry (new LTableMonoGeometry (mRemindersTable,
- 340,
- 15));
- mRemindersTable->SetTableSelector (new LTableSingleSelector (mRemindersTable));
- mRemindersTable->UsePanel (CReminder::CreateReminder (mRemindersTable, this));
- mRemindersTable->SetSingleClickMessage (msgReminders);
- mRemindersTable->SetDoubleClickMessage (cmdEditReminder);
- mRemindersTable->AddListener (this);
-
- mAddButton = (LPushButton*) FindPaneByID ('Add ');
-
- mEditButton = (LPushButton*) FindPaneByID ('Edit');
-
- mDeleteButton = (LPushButton*) FindPaneByID ('Dele');
-
-
- UReanimator::LinkListenerToControls(this, this, RidL_MainWindowID);
- // "connect" self to our controls that we want to "listen" to
-
- // any additional initialization for your window:
- }
-
- //----------
- void CMainWindow::ConnectToData (
- DDocData* inData)
- {
- mData = inData;
- mData->AddListener (this);
-
- mRemindersTable->UseArray (mData->GetReminders ());
- mRemindersTable->SetValue (mData->GetReminderChoice ());
- if (mData->GetIsSelected ()) {
- mEditButton->Enable ();
- } else {
- mEditButton->Disable ();
- }
- if (mData->GetIsSelected ()) {
- mDeleteButton->Enable ();
- } else {
- mDeleteButton->Disable ();
- }
- }
-
- //----------
- void CMainWindow::DoEditReminder ()
- {
- DReminder* data = new DReminder;
-
- // hand-written "Before" code:
- SInt32 index = mData->GetReminderChoice ();
- DReminder* oldItem = mData->GetReminders ()->GetNthItem (1 + index);
-
- data->CopyFrom (oldItem);
- //
- CAdd* dialog = CAdd::CreateAdd (this, cmdEditReminder, data);
- }
-
- //----------
- void CMainWindow::FinishEditReminder (
- void* ioParam)
- {
- CAdd* dialog = (CAdd *)ioParam;
- DReminder* data = dialog->GetData ();
-
- // hand-written "If true" code:
- SInt32 index = mData->GetReminderChoice ();
- DReminder* oldItem = mData->GetReminders ()->GetNthItem (1 + index);
-
- oldItem->CopyFrom (data);
- mData->GetReminders ()->ChangedNth (1 + index);
- //
- delete dialog;
- }
-
- //----------
- void CMainWindow::DoAddReminder ()
- {
- DReminder* data = new DReminder;
-
-
- // pre-invoke code
-
- CAdd* dialog = CAdd::CreateAdd (this, cmdAddReminder, data);
- }
-
- //----------
- void CMainWindow::FinishAddReminder (
- void* ioParam)
- {
- CAdd* dialog = (CAdd *)ioParam;
- DReminder* data = dialog->GetData ();
-
- // hand-written:
- DReminder* newItem = new DReminder;
-
- newItem->CopyFrom (data);
- mData->GetReminders ()->AddItem (newItem);
- //
-
- delete dialog;
- }
-
- //----------
- void CMainWindow::DoDeleteReminder ()
- {
- SInt32 index = mData->GetReminderChoice ();
- mData->GetReminders ()->RemoveNth (1 + index);
- // GetEngine ()->SetDirty ();
-
- }
-
- //----------
- void CMainWindow::DataChanged (
- long inDataID)
- {
- StopListening ();
-
- if (inDataID == idReminderChoice) {
- mRemindersTable->SetValue (mData->GetReminderChoice ());
- }
- if (inDataID == idIsSelected) {
- if (mData->GetIsSelected ()) {
- mEditButton->Enable ();
- } else {
- mEditButton->Disable ();
- }
- }
- if (inDataID == idIsSelected) {
- if (mData->GetIsSelected ()) {
- mDeleteButton->Enable ();
- } else {
- mDeleteButton->Disable ();
- }
- }
-
- StartListening ();
- }
-
- //----------
- void CMainWindow::ListenToMessage (
- MessageT inMessage,
- void* ioParam)
- {
- switch (inMessage) {
- case msgDataChanged:
- DataChanged ((long)ioParam);
- break;
-
- case msgReminders:
- mData->SetReminderChoice (mRemindersTable->GetValue ());
- break;
-
- case cmdEditReminder:
- DoEditReminder ();
- break;
-
- case cmdAddReminder:
- DoAddReminder ();
- break;
-
- case cmdDeleteReminder:
- DoDeleteReminder ();
- break;
-
- default:
- ; // do something
- break;
- }
- }
-
- //----------
- Boolean CMainWindow::ObeyCommand (
- CommandT inCommand,
- void* ioParam)
- {
- Boolean cmdHandled = true;
-
- if (inCommand < 0) {
- // modal dialog has finished
-
- switch (-inCommand) {
- case cmdEditReminder:
- FinishEditReminder (ioParam);
- break;
-
- case cmdAddReminder:
- FinishAddReminder (ioParam);
- break;
-
- }
-
- } else {
- switch (inCommand) {
-
- default:
- cmdHandled = LWindow::ObeyCommand(inCommand, ioParam);
- break;
- }
- }
-
- return cmdHandled;
- }
-
- //----------
- void CMainWindow::FindCommandStatus (
- CommandT inCommand,
- Boolean &outEnabled,
- Boolean &outUsesMark,
- Char16 &outMark,
- Str255 outName)
- {
- outUsesMark = false;
-
- switch (inCommand) {
-
-
- default:
- LWindow::FindCommandStatus(inCommand, outEnabled,
- outUsesMark, outMark, outName);
- break;
- }
- }
-